package com.hanlyjiang.library.utils;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class Utils {

    public static void copyFile(InputStream in, String newPath) {
        FileUtils.copyFile(in, newPath);
    }

    public static void showToast(Context context, String msg) {
        AndroidUtils.showToast(context, msg);
    }

    public static void showToast(Context context, int msgResId) {
        AndroidUtils.showToast(context, msgResId);
    }

    public static void showDialog(Context context, String tiltle, String msg, DialogInterface.OnClickListener okClick, DialogInterface.OnClickListener cancelClick) {
        AndroidUtils.showDialog(context, tiltle, msg, okClick, cancelClick);
    }


    /**
     * 默认等待对话框的创建
     *
     * @param context
     * @param title
     * @param msg
     * @return
     */
    public static ProgressDialog showWaitDialog(Context context, String title, String msg) {
        return AndroidUtils.showWaitDialog(context, title, msg);
    }

    /**
     * 把长度为米转换成米或公里的字符串
     *
     * @param len
     * @return
     */
    public static String lenToStr(double len) {
        if (len > 1000) {//大于1000m换算到公里
            return String.format("%.1f公里", len / 1000);
        }
        return String.format("%.1f米", len);
    }

    public static String areaToStr(double area) {
        if (area > 1000000) {
            return String.format("%.1f平方公里", area / 1000000);
        }
        return String.format("%.1f平方米", area);
    }

    public static String timeToStr(int second) {
        String timeStr = "";
        if (second > 360) {
            timeStr = (int) Math.ceil((second / 360.0f)) + "小时";
            second = second % 360;
            return timeStr;
        }
        if (second > 60) {
            timeStr = /*timeStr + */(int) Math.ceil(second / 60.0f) + "分钟";
            return timeStr;
        }
        timeStr = second + "秒";
        return timeStr.toString();
    }


    /* Log 工具 */
    public static void logDebug(String msg) {
        LogUtils.d(msg);
    }

    public static void logDebug(String tag, String msg) {
        LogUtils.d(tag, msg);
    }

    public static void logError(String msg) {
        LogUtils.e(msg);
    }

    public static void logError(String tag, String msg) {
        LogUtils.e(tag, msg);
    }


    /* 拷贝Asset文件夹到sd卡 */
    public static void copyAssetsDir(Context context, String fromDir, String destDir) throws IOException {
        FileUtils.copyAssetsDir(context, fromDir, destDir);
    }

    /**
     * 根据已经遇到的情况写的服务器异常消息截取方法（）
     *
     * @param e 查询服务抛出的异常
     * @return 一个 readable String
     */
    public static String explainRouteServerExceptionMsg(Exception e) {
        // TODO 处理所有测试出的异常状况
        String msg = null;
        String errMsg = e.getMessage();
        int index = errMsg.indexOf("???");
        if (index != -1) {
            msg = errMsg.substring(0, index - 1);
        } else {
            msg = errMsg;
        }
        String[] msgs = msg.split("\\^\\^");
        if (msgs.length >= 3) {
            msg = msgs[1];
        }
        return msg != null ? msg : "";
    }

    /**
     * 获得指定文件夹下所有的文件列表，递归获取子目录中的文件
     *
     * @param allFiles 用于存储结果列表的List
     * @param root     需要查询的目录
     * @param filter   文件筛选
     */
    public static void listFiles(List<File> allFiles, File root, FileFilter filter) {
        FileUtils.listFiles(allFiles, root, filter);
    }

    public static List<File> getFileInfoList(String path) {
        ArrayList<File> files = new ArrayList<File>();
        FileFilter filter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.isDirectory()) {
                    return true;
                }
                if (pathname.isFile()) {
                    if (pathname.getName().endsWith(".fcs")
                            || pathname.getName().endsWith(".tile")) {
                        return true;
                    }
                }
                return false;
            }
        };
        Utils.listFiles(files, new File(path), filter);
        return files;
    }

    /*
     * 获取当前程序的版本号
     */
    public static String getVersionName(Context context) throws Exception {
        return AndroidUtils.getVersionName(context);
    }
}
